from django.shortcuts import render, redirect, HttpResponse
from openpyxl.reader.excel import load_workbook

from app01 import models
import os

def depart_list(request):
    """ 部门列表 """

    # 去数据库中获取所有的部门列表
    #  [对象,对象,对象]
    current_admin_org_id = request.session.get('admin_info', {}).get('org_id')

    # 去数据库中获取当前组织下的所有部门列表
    queryset = models.Department.objects.filter(org_id=current_admin_org_id)
    # queryset = models.Department.objects.all()
    return render(request, 'depart_list.html', {'queryset': queryset})
    # 将获得的数据queryset传到depart_list.html去进行显示

def depart_add(request):
    """ 添加部门 """
    if request.method == "GET":  # 如果是GET请求，则返回depart_add.html显示页面给用户（点击链接——显示界面）
        return render(request, 'depart_add.html')

    # 如果请求是POST请求（用户提交了表单）
    # 获取用户POST提交过来的数据（title输入为空）
    title = request.POST.get("title")  # 从POST数据中获取名为title的输入字段的值
    current_admin_org_id = request.session.get('admin_info', {}).get('org_id')
    # 这里的"title"与前端页面的name值是对应
    # <input type="text" class="form-control" placeholder="标题" name="title"/>
    # <!--name="title"：这个属性为输入控件定义了一个名称 title-->
    # <!--这个名称在表单提交时用于识别数据字段，服务器端可以通过这个名称获取用户输入的值-->

    # 保存到数据库
    models.Department.objects.create(title=title, org_id=current_admin_org_id)  # 把新部门保存到数据库中

    # 重定向回部门列表
    return redirect("/depart/list/")

def depart_delete(request):
    # 假设点击删除按钮时在URL中会提供对应的id
    # 那删除操作就可以根据id来进行了

    # 因此首先从GET请求中获取对应要删除的id(在depart_list.html中定义）
    current_admin_org_id = request.session.get('admin_info', {}).get('org_id')
    nid = request.GET.get('nid')

    # 执行删除操作
    models.Department.objects.filter(id=nid, org_id=current_admin_org_id).delete()

    # 重定向返回部门列表
    return redirect("/depart/list/")

def depart_edit(request,nid):  # 传入request与nid
    # 部门编辑
    # 与删除操作一样，从URL中获取对应要编辑的ID
    current_admin_org_id = request.session.get('admin_info', {}).get('org_id')
    if request.method == "GET":   # 如果是GET请求(点击链接)，则跳转到对应id的编辑页面depart_edit.html
        # 根据id，获取他的数据
        row_objct = models.Department.objects.filter(id=nid, org_id=current_admin_org_id).first()
        return render(request,'depart_edit.html',{'row_objct':row_objct})

    # post请求(提交表单)
    title = request.POST.get("title")  # 获得用户提交的信息
    # 根据ID找到数据库中的数据进行更新
    models.Department.objects.filter(id=nid, org_id=current_admin_org_id).update(title=title)

    # 重定向返回部门列表
    return redirect("/depart/list/")


def depart_multi(request):
    # 代码的主要功能是允许用户上传一个Excel文件，然后根据文件中的数据批量创建部门记录到数据库
    file_object = request.FILES.get('exc')
    if file_object is None:
        return HttpResponse("请上传文件后再进行操作。")

    current_admin_org_id = request.session.get('admin_info', {}).get('org_id')
    # 获取文件扩展名，用于验证文件类型
    file_extension = os.path.splitext(file_object.name)[1][1:]
    if file_extension not in ['xlsx', 'xlsm', 'xltx', 'xltm']:
        return HttpResponse("请上传正确格式的Excel文件（.xlsx、.xlsm、.xltx或.xltm）。")

    # 2.对象传递给openpyxl，由openpyxl读取文件的内容
    wb = load_workbook(file_object)
    sheet = wb.worksheets[0]

    for row in sheet.iter_rows(min_row=2):
        text = row[0].value
        exits = models.Department.objects.filter(title=text,org_id=current_admin_org_id).exists()
        if not exits:
            models.Department.objects.create(title=text,org_id=current_admin_org_id)

    return redirect("/depart/list/")









